home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip: 2001 Haziran
/
CHIP Haziran2001.iso
/
prog
/
haziran
/
19
/
setup.exe
/
data.z
/
pci_dump.c
< prev
next >
Wrap
C/C++ Source or Header
|
2001-04-11
|
2KB
|
80 lines
////////////////////////////////////////////////////////////////
// File - PCI_DUMP.C
//
// A utility for getting a dump of all the PCI configuration
// registers of the PCI cards installed.
//
////////////////////////////////////////////////////////////////
#include "../../include/windrvr.h"
#include "../shared/pci_diag_lib.h"
#include <stdio.h>
int main (int argc, char *argv[])
{
HANDLE hWD;
char buf[256];
WORD wVendorID;
WORD wDeviceID;
WD_PCI_CONFIG_DUMP pciCnf;
int g;
if (!PCI_Get_WD_handle(&hWD)) return 0;
BZERO(pciCnf);
pciCnf.fIsRead = TRUE;
printf ("pci bus scan (using WD_PciConfigDump)\n");
for (pciCnf.pciSlot.dwBus=0; pciCnf.pciSlot.dwBus<256;
pciCnf.pciSlot.dwBus++)
{
for (pciCnf.pciSlot.dwSlot=0; pciCnf.pciSlot.dwSlot<32;
pciCnf.pciSlot.dwSlot++)
{
for (pciCnf.pciSlot.dwFunction=0; pciCnf.pciSlot.dwFunction<8;
pciCnf.pciSlot.dwFunction++)
{
CHAR tmp[200];
wVendorID = 0xffff;
pciCnf.pBuffer = &wVendorID;
pciCnf.dwBytes = sizeof(wVendorID);
pciCnf.dwOffset = 0;
WD_PciConfigDump(hWD,&pciCnf);
if (wVendorID==0xffff)
{
if (pciCnf.pciSlot.dwFunction==0)
break; // skip slot
else
continue; // skip function
}
pciCnf.pBuffer = &wDeviceID;
pciCnf.dwBytes = sizeof(wDeviceID);
pciCnf.dwOffset = 2;
WD_PciConfigDump(hWD,&pciCnf);
pciCnf.pBuffer = buf;
pciCnf.dwBytes = sizeof(buf);
pciCnf.dwOffset = 0;
WD_PciConfigDump(hWD,&pciCnf);
printf("Bus %d Slot %d Function %d, VendorID %04x DeviceID %04x\n",
pciCnf.pciSlot.dwBus, pciCnf.pciSlot.dwSlot, pciCnf.pciSlot.dwFunction, wVendorID, wDeviceID);
for (g=0; g<256; g+=4)
{
if ((g/4) % 8 == 0) printf("%2x ",g);
printf ("%08x ",*((DWORD *) (buf+g)));
if ((g/4) % 8 == 7) printf("\n");
}
PCI_Print_card_info(pciCnf.pciSlot);
printf("Press Enter to continue to next slot\n");
fgets(tmp, sizeof(tmp), stdin);
}
}
}
WD_Close(hWD);
return 0;
}